home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / FROMUTS / CDUNGEON / !CDUNGEON / c / CLOCKR < prev    next >
Text File  |  1991-05-20  |  19KB  |  801 lines

  1. /* CEVAPP- CLOCK EVENT APPLICABLES */
  2.  
  3. /*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/
  4. /* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */
  5. /* WRITTEN BY R. M. SUPNIK */
  6.  
  7. #include "funcs.h"
  8. #include "vars.h"
  9.  
  10. static void litint_ P((integer, integer *, integer, const integer *,
  11.                integer));
  12.  
  13. void cevapp_(ri)
  14. integer ri;
  15. {
  16.     /* Initialized data */
  17.  
  18.     static const integer cndtck[10] = { 50,20,10,5,0,156,156,156,157,0 };
  19.     static const integer lmptck[12] = { 50,30,20,10,4,0,154,154,154,154,155,0 };
  20.  
  21.     /* System generated locals */
  22.     integer i__1, i__2;
  23.  
  24.     /* Local variables */
  25.     logical f;
  26.     integer i, j, bc, br;
  27.  
  28.     if (ri == 0) {
  29.     return;
  30.     }
  31. /*                         !IGNORE DISABLED. */
  32.     switch (ri) {
  33.     case 1:  goto L1000;
  34.     case 2:  goto L2000;
  35.     case 3:  goto L3000;
  36.     case 4:  goto L4000;
  37.     case 5:  goto L5000;
  38.     case 6:  goto L6000;
  39.     case 7:  goto L7000;
  40.     case 8:  goto L8000;
  41.     case 9:  goto L9000;
  42.     case 10:  goto L10000;
  43.     case 11:  goto L11000;
  44.     case 12:  goto L12000;
  45.     case 13:  goto L13000;
  46.     case 14:  goto L14000;
  47.     case 15:  goto L15000;
  48.     case 16:  goto L16000;
  49.     case 17:  goto L17000;
  50.     case 18:  goto L18000;
  51.     case 19:  goto L19000;
  52.     case 20:  goto L20000;
  53.     case 21:  goto L21000;
  54.     case 22:  goto L22000;
  55.     case 23:  goto L23000;
  56.     case 24:  goto L24000;
  57.     }
  58.     bug_(3, ri);
  59.  
  60. /* CEV1--    CURE CLOCK.  LET PLAYER SLOWLY RECOVER. */
  61.  
  62. L1000:
  63. /* Computing MIN */
  64.     i__1 = 0, i__2 = advs_1.astren[aindex_1.player - 1] + 1;
  65.     advs_1.astren[aindex_1.player - 1] = min(i__1,i__2);
  66. /*                         !RECOVER. */
  67.     if (advs_1.astren[aindex_1.player - 1] >= 0) {
  68.     return;
  69.     }
  70. /*                         !FULLY RECOVERED? */
  71.     cevent_1.ctick[cindex_1.cevcur - 1] = 30;
  72. /*                         !NO, WAIT SOME MORE. */
  73.     return;
  74.  
  75. /* CEV2--    MAINT-ROOM WITH LEAK.  RAISE THE WATER LEVEL. */
  76.  
  77. L2000:
  78.     if (play_1.here == rindex_1.maint) {
  79.     i__1 = findex_1.rvmnt / 2 + 71;
  80.     rspeak_(i__1);
  81.     }
  82. /*                         !DESCRIBE. */
  83.     ++findex_1.rvmnt;
  84. /*                         !RAISE WATER LEVEL. */
  85.     if (findex_1.rvmnt <= 16) {
  86.     return;
  87.     }
  88. /*                         !IF NOT FULL, EXIT. */
  89.     cevent_1.ctick[cindex_1.cevmnt - 1] = 0;
  90. /*                         !FULL, DISABLE CLOCK. */
  91.     rooms_1.rflag[rindex_1.maint - 1] |= RMUNG;
  92.     rrand[rindex_1.maint - 1] = 80;
  93. /*                         !SAY IT IS FULL OF WATER. */
  94.     if (play_1.here == rindex_1.maint) {
  95.     jigsup_(81);
  96.     }
  97. /*                         !DROWN HIM IF PRESENT. */
  98.     return;
  99.  
  100. /* CEV3--    LANTERN.  DESCRIBE GROWING DIMNESS. */
  101.  
  102. L3000:
  103.     litint_(oindex_1.lamp, &findex_1.orlamp, cindex_1.cevlnt, lmptck, 12);
  104. /*                         !DO LIGHT INTERRUPT. */
  105.     return;
  106.  
  107. /* CEV4--    MATCH.  OUT IT GOES. */
  108.  
  109. L4000:
  110.     rspeak_(153);
  111. /*                         !MATCH IS OUT. */
  112.     objcts_1.oflag1[oindex_1.match - 1] &= ~ ONBT;
  113.     return;
  114.  
  115. /* CEV5--    CANDLE.  DESCRIBE GROWING DIMNESS. */
  116.  
  117. L5000:
  118.     litint_(oindex_1.candl, &findex_1.orcand, cindex_1.cevcnd, cndtck, 10);
  119. /*                         !DO CANDLE INTERRUPT. */
  120.     return;
  121. /* CEVAPP, PAGE 3 */
  122.  
  123. /* CEV6--    BALLOON */
  124.  
  125. L6000:
  126.     cevent_1.ctick[cindex_1.cevbal - 1] = 3;
  127. /*                         !RESCHEDULE INTERRUPT. */
  128.     f = advs_1.avehic[play_1.winner - 1] == oindex_1.ballo;
  129. /*                         !SEE IF IN BALLOON. */
  130.     if (state_1.bloc == rindex_1.vlbot) {
  131.     goto L6800;
  132.     }
  133. /*                         !AT BOTTOM? */
  134.     if (state_1.bloc == rindex_1.ledg2 || state_1.bloc == rindex_1.ledg3 || 
  135.         state_1.bloc == rindex_1.ledg4 || state_1.bloc == rindex_1.vlbot) 
  136.         {
  137.     goto L6700;
  138.     }
  139. /*                         !ON LEDGE? */
  140.     if ((objcts_1.oflag2[oindex_1.recep - 1] & OPENBT) != 0 && 
  141.         findex_1.binff != 0) {
  142.     goto L6500;
  143.     }
  144.  
  145. /* BALLOON IS IN MIDAIR AND IS DEFLATED (OR HAS RECEPTACLE CLOSED). */
  146. /* FALL TO NEXT ROOM. */
  147.  
  148.     if (state_1.bloc != rindex_1.vair1) {
  149.     goto L6300;
  150.     }
  151. /*                         !IN VAIR1? */
  152.     state_1.bloc = rindex_1.vlbot;
  153. /*                         !YES, NOW AT VLBOT. */
  154.     newsta_(oindex_1.ballo, 0, state_1.bloc, 0, 0);
  155.     if (f) {
  156.     goto L6200;
  157.     }
  158. /*                         !IN BALLOON? */
  159.     if (play_1.here == rindex_1.ledg2 || play_1.here == rindex_1.ledg3 || 
  160.         play_1.here == rindex_1.ledg4 || play_1.here == rindex_1.vlbot) {
  161.     rspeak_(530);
  162.     }
  163. /*                         !ON LEDGE, DESCRIBE. */
  164.     return;
  165.  
  166. L6200:
  167.     f = moveto_(state_1.bloc, play_1.winner);
  168. /*                         !MOVE HIM. */
  169.     if (findex_1.binff == 0) {
  170.     goto L6250;
  171.     }
  172. /*                         !IN BALLOON.  INFLATED? */
  173.     rspeak_(531);
  174. /*                         !YES, LANDED. */
  175.     f = rmdesc_(0);
  176. /*                         !DESCRIBE. */
  177.     return;
  178.  
  179. L6250:
  180.     newsta_(oindex_1.ballo, 532, 0, 0, 0);
  181. /*                         !NO, BALLOON & CONTENTS DIE. */
  182.     newsta_(oindex_1.dball, 0, state_1.bloc, 0, 0);
  183. /*                         !INSERT DEAD BALLOON. */
  184.     advs_1.avehic[play_1.winner - 1] = 0;
  185. /*                         !NOT IN VEHICLE. */
  186.     cevent_1.cflag[cindex_1.cevbal - 1] = FALSE_;
  187. /*                         !DISABLE INTERRUPTS. */
  188.     cevent_1.cflag[cindex_1.cevbrn - 1] = FALSE_;
  189.     findex_1.binff = 0;
  190.     findex_1.btief = 0;
  191.     return;
  192.  
  193. L6300:
  194.     --state_1.bloc;
  195. /*                         !NOT IN VAIR1, DESCEND. */
  196.     newsta_(oindex_1.ballo, 0, state_1.bloc, 0, 0);
  197.     if (f) {
  198.     goto L6400;
  199.     }
  200. /*                         !IS HE IN BALLOON? */
  201.     if (play_1.here == rindex_1.ledg2 || play_1.here == rindex_1.ledg3 || 
  202.         play_1.here == rindex_1.ledg4 || play_1.here == rindex_1.vlbot) {
  203.     rspeak_(533);
  204.     }
  205. /*                         !IF ON LEDGE, DESCRIBE. */
  206.     return;
  207.  
  208. L6400:
  209.     f = moveto_(state_1.bloc, play_1.winner);
  210. /*                         !IN BALLOON, MOVE HIM. */
  211.     rspeak_(534);
  212. /*                         !DESCRIBE. */
  213.     f = rmdesc_(0);
  214.     return;
  215.  
  216. /* BALLOON IS IN MIDAIR AND IS INFLATED, UP-UP-AND-AWAY */
  217. /*                         ! */
  218.  
  219. L6500:
  220.     if (state_1.bloc != rindex_1.vair4) {
  221.     goto L6600;
  222.     }
  223. /*                         !AT VAIR4? */
  224.     cevent_1.ctick[cindex_1.cevbrn - 1] = 0;
  225.     cevent_1.ctick[cindex_1.cevbal - 1] = 0;
  226.     findex_1.binff = 0;
  227.     findex_1.btief = 0;
  228.     state_1.bloc = rindex_1.vlbot;
  229. /*                         !FALL TO BOTTOM. */
  230.     newsta_(oindex_1.ballo, 0, 0, 0, 0);
  231. /*                         !BALLOON & CONTENTS DIE. */
  232.     newsta_(oindex_1.dball, 0, state_1.bloc, 0, 0);
  233. /*                         !SUBSTITUTE DEAD BALLOON. */
  234.     if (f) {
  235.     goto L6550;
  236.     }
  237. /*                         !WAS HE IN IT? */
  238.     if (play_1.here == rindex_1.ledg2 || play_1.here == rindex_1.ledg3 || 
  239.         play_1.here == rindex_1.ledg4 || play_1.here == rindex_1.vlbot) {
  240.     rspeak_(535);
  241.     }
  242. /*                         !IF HE CAN SEE, DESCRIBE. */
  243.     return;
  244.  
  245. L6550:
  246.     jigsup_(536);
  247. /*                         !IN BALLOON AT CRASH, DIE. */
  248.     return;
  249.  
  250. L6600:
  251.     ++state_1.bloc;
  252. /*                         !NOT AT VAIR4, GO UP. */
  253.     newsta_(oindex_1.ballo, 0, state_1.bloc, 0, 0);
  254.     if (f) {
  255.     goto L6650;
  256.     }
  257. /*                         !IN BALLOON? */
  258.     if (play_1.here == rindex_1.ledg2 || play_1.here == rindex_1.ledg3 || 
  259.         play_1.here == rindex_1.ledg4 || play_1.here == rindex_1.vlbot) {
  260.     rspeak_(537);
  261.     }
  262. /*                         !CAN HE SEE IT? */
  263.     return;
  264.  
  265. L6650:
  266.     f = moveto_(state_1.bloc, play_1.winner);
  267. /*                         !MOVE PLAYER. */
  268.     rspeak_(538);
  269. /*                         !DESCRIBE. */
  270.     f = rmdesc_(0);
  271.     return;
  272.  
  273. /* ON LEDGE, GOES TO MIDAIR ROOM WHETHER INFLATED OR NOT. */
  274.  
  275. L6700:
  276.     state_1.bloc += rindex_1.vair2 - rindex_1.ledg2;
  277. /*                         !MOVE TO MIDAIR. */
  278.     newsta_(oindex_1.ballo, 0, state_1.bloc, 0, 0);
  279.     if (f) {
  280.     goto L6750;
  281.     }
  282. /*                         !IN BALLOON? */
  283.     if (play_1.here == rindex_1.ledg2 || play_1.here == rindex_1.ledg3 || 
  284.         play_1.here == rindex_1.ledg4 || play_1.here == rindex_1.vlbot) {
  285.     rspeak_(539);
  286.     }
  287. /*                         !NO, STRANDED. */
  288.     cevent_1.ctick[cindex_1.cevvlg - 1] = 10;
  289. /*                         !MATERIALIZE GNOME. */
  290.     return;
  291.  
  292. L6750:
  293.     f = moveto_(state_1.bloc, play_1.winner);
  294. /*                         !MOVE TO NEW ROOM. */
  295.     rspeak_(540);
  296. /*                         !DESCRIBE. */
  297.     f = rmdesc_(0);
  298.     return;
  299.  
  300. /* AT BOTTOM, GO UP IF INFLATED, DO NOTHING IF DEFLATED. */
  301.  
  302. L6800:
  303.     if (findex_1.binff == 0 || ! ((objcts_1.oflag2[oindex_1.recep - 1] & 
  304.         OPENBT) != 0)) {
  305.     return;
  306.     }
  307.     state_1.bloc = rindex_1.vair1;
  308. /*                         !INFLATED AND OPEN, */
  309.     newsta_(oindex_1.ballo, 0, state_1.bloc, 0, 0);
  310. /*                         !GO UP TO VAIR1. */
  311.     if (f) {
  312.     goto L6850;
  313.     }
  314. /*                         !IN BALLOON? */
  315.     if (play_1.here == rindex_1.ledg2 || play_1.here == rindex_1.ledg3 || 
  316.         play_1.here == rindex_1.ledg4 || play_1.here == rindex_1.vlbot) {
  317.     rspeak_(541);
  318.     }
  319. /*                         !IF CAN SEE, DESCRIBE. */
  320.     return;
  321.  
  322. L6850:
  323.     f = moveto_(state_1.bloc, play_1.winner);
  324. /*                         !MOVE PLAYER. */
  325.     rspeak_(542);
  326.     f = rmdesc_(0);
  327.     return;
  328. /* CEVAPP, PAGE 4 */
  329.  
  330. /* CEV7--    BALLOON BURNUP */
  331.  
  332. L7000:
  333.     i__1 = objcts_1.olnt;
  334.     for (i = 1; i <= i__1; ++i) {
  335. /*                         !FIND BURNING OBJECT */
  336.     if (oindex_1.recep == objcts_1.ocan[i - 1] && (objcts_1.oflag1[i - 1] 
  337.         & FLAMBT) != 0) {
  338.         goto L7200;
  339.     }
  340. /* L7100: */
  341.     }
  342.     bug_(4, 0);
  343.  
  344. L7200:
  345.     newsta_(i, 0, 0, 0, 0);
  346. /*                         !VANISH OBJECT. */
  347.     findex_1.binff = 0;
  348. /*                         !UNINFLATED. */
  349.     if (play_1.here == state_1.bloc) {
  350.     rspsub_(292, objcts_1.odesc2[i - 1]);
  351.     }
  352. /*                         !DESCRIBE. */
  353.     return;
  354.  
  355. /* CEV8--    FUSE FUNCTION */
  356.  
  357. L8000:
  358.     if (objcts_1.ocan[oindex_1.fuse - 1] != oindex_1.brick) {
  359.     goto L8500;
  360.     }
  361. /*                         !IGNITED BRICK? */
  362.     br = objcts_1.oroom[oindex_1.brick - 1];
  363. /*                         !GET BRICK ROOM. */
  364.     bc = objcts_1.ocan[oindex_1.brick - 1];
  365. /*                         !GET CONTAINER. */
  366.     if (br == 0 && bc != 0) {
  367.     br = objcts_1.oroom[bc - 1];
  368.     }
  369.     newsta_(oindex_1.fuse, 0, 0, 0, 0);
  370. /*                         !KILL FUSE. */
  371.     newsta_(oindex_1.brick, 0, 0, 0, 0);
  372. /*                         !KILL BRICK. */
  373.     if (br != 0 && br != play_1.here) {
  374.     goto L8100;
  375.     }
  376. /*                         !BRICK ELSEWHERE? */
  377.  
  378.     rooms_1.rflag[play_1.here - 1] |= RMUNG;
  379.     rrand[play_1.here - 1] = 114;
  380. /*                         !MUNG ROOM. */
  381.     jigsup_(150);
  382. /*                         !DEAD. */
  383.     return;
  384.  
  385. L8100:
  386.     rspeak_(151);
  387. /*                         !BOOM. */
  388.     state_1.mungrm = br;
  389. /*                         !SAVE ROOM THAT BLEW. */
  390.     cevent_1.ctick[cindex_1.cevsaf - 1] = 5;
  391. /*                         !SET SAFE INTERRUPT. */
  392.     if (br != rindex_1.msafe) {
  393.     goto L8200;
  394.     }
  395. /*                         !BLEW SAFE ROOM? */
  396.     if (bc != oindex_1.sslot) {
  397.     return;
  398.     }
  399. /*                         !WAS BRICK IN SAFE? */
  400.     newsta_(oindex_1.sslot, 0, 0, 0, 0);
  401. /*                         !KILL SLOT. */
  402.     objcts_1.oflag2[oindex_1.safe - 1] |= OPENBT;
  403.     findex_1.safef = TRUE_;
  404. /*                         !INDICATE SAFE BLOWN. */
  405.     return;
  406.  
  407. L8200:
  408.     i__1 = objcts_1.olnt;
  409.     for (i = 1; i <= i__1; ++i) {
  410. /*                         !BLEW WRONG ROOM. */
  411.     if (qhere_(i, br) && (objcts_1.oflag1[i - 1] & TAKEBT) != 
  412.         0) {
  413.         newsta_(i, 0, 0, 0, 0);
  414.     }
  415. /* L8250: */
  416.     }
  417.     if (br != rindex_1.lroom) {
  418.     return;
  419.     }
  420. /*                         !BLEW LIVING ROOM? */
  421.     i__1 = objcts_1.olnt;
  422.     for (i = 1; i <= i__1; ++i) {
  423.     if (objcts_1.ocan[i - 1] == oindex_1.tcase) {
  424.         newsta_(i, 0, 0, 0, 0);
  425.     }
  426. /*                         !KILL TROPHY CASE. */
  427. /* L8300: */
  428.     }
  429.     return;
  430.  
  431. L8500:
  432.     if (qhere_(oindex_1.fuse, play_1.here) || objcts_1.oadv[oindex_1.fuse - 
  433.         1] == play_1.winner) {
  434.     rspeak_(152);
  435.     }
  436.     newsta_(oindex_1.fuse, 0, 0, 0, 0);
  437. /*                         !KILL FUSE. */
  438.     return;
  439. /* CEVAPP, PAGE 5 */
  440.  
  441. /* CEV9--    LEDGE MUNGE. */
  442.  
  443. L9000:
  444.     rooms_1.rflag[rindex_1.ledg4 - 1] |= RMUNG;
  445.     rrand[rindex_1.ledg4 - 1] = 109;
  446.     if (play_1.here == rindex_1.ledg4) {
  447.     goto L9100;
  448.     }
  449. /*                         !WAS HE THERE? */
  450.     rspeak_(110);
  451. /*                         !NO, NARROW ESCAPE. */
  452.     return;
  453.  
  454. L9100:
  455.     if (advs_1.avehic[play_1.winner - 1] != 0) {
  456.     goto L9200;
  457.     }
  458. /*                         !IN VEHICLE? */
  459.     jigsup_(111);
  460. /*                         !NO, DEAD. */
  461.     return;
  462.  
  463. L9200:
  464.     if (findex_1.btief != 0) {
  465.     goto L9300;
  466.     }
  467. /*                         !TIED TO LEDGE? */
  468.     rspeak_(112);
  469. /*                         !NO, NO PLACE TO LAND. */
  470.     return;
  471.  
  472. L9300:
  473.     state_1.bloc = rindex_1.vlbot;
  474. /*                         !YES, CRASH BALLOON. */
  475.     newsta_(oindex_1.ballo, 0, 0, 0, 0);
  476. /*                         !BALLOON & CONTENTS DIE. */
  477.     newsta_(oindex_1.dball, 0, state_1.bloc, 0, 0);
  478. /*                         !INSERT DEAD BALLOON. */
  479.     findex_1.btief = 0;
  480.     findex_1.binff = 0;
  481.     cevent_1.cflag[cindex_1.cevbal - 1] = FALSE_;
  482.     cevent_1.cflag[cindex_1.cevbrn - 1] = FALSE_;
  483.     jigsup_(113);
  484. /*                         !DEAD */
  485.     return;
  486.  
  487. /* CEV10--    SAFE MUNG. */
  488.  
  489. L10000:
  490.     rooms_1.rflag[state_1.mungrm - 1] |= RMUNG;
  491.     rrand[state_1.mungrm - 1] = 114;
  492.     if (play_1.here == state_1.mungrm) {
  493.     goto L10100;
  494.     }
  495. /*                         !IS HE PRESENT? */
  496.     rspeak_(115);
  497. /*                         !LET HIM KNOW. */
  498.     if (state_1.mungrm == rindex_1.msafe) {
  499.     cevent_1.ctick[cindex_1.cevled - 1] = 8;
  500.     }
  501. /*                         !START LEDGE CLOCK. */
  502.     return;
  503.  
  504. L10100:
  505.     i = 116;
  506. /*                         !HE'S DEAD, */
  507.     if ((rooms_1.rflag[play_1.here - 1] & RHOUSE) != 0) {
  508.     i = 117;
  509.     }
  510.     jigsup_(i);
  511. /*                         !LET HIM KNOW. */
  512.     return;
  513. /* CEVAPP, PAGE 6 */
  514.  
  515. /* CEV11--    VOLCANO GNOME */
  516.  
  517. L11000:
  518.     if (play_1.here == rindex_1.ledg2 || play_1.here == rindex_1.ledg3 || 
  519.         play_1.here == rindex_1.ledg4 || play_1.here == rindex_1.vlbot) {
  520.     goto L11100;
  521.     }
  522. /*                         !IS HE ON LEDGE? */
  523.     cevent_1.ctick[cindex_1.cevvlg - 1] = 1;
  524. /*                         !NO, WAIT A WHILE. */
  525.     return;
  526.  
  527. L11100:
  528.     newsta_(oindex_1.gnome, 118, play_1.here, 0, 0);
  529. /*                         !YES, MATERIALIZE GNOME. */
  530.     return;
  531.  
  532. /* CEV12--    VOLCANO GNOME DISAPPEARS */
  533.  
  534. L12000:
  535.     newsta_(oindex_1.gnome, 149, 0, 0, 0);
  536. /*                         !DISAPPEAR THE GNOME. */
  537.     return;
  538.  
  539. /* CEV13--    BUCKET. */
  540.  
  541. L13000:
  542.     if (objcts_1.ocan[oindex_1.water - 1] == oindex_1.bucke) {
  543.     newsta_(oindex_1.water, 0, 0, 0, 0);
  544.     }
  545.     return;
  546.  
  547. /* CEV14--    SPHERE.  IF EXPIRES, HE'S TRAPPED. */
  548.  
  549. L14000:
  550.     rooms_1.rflag[rindex_1.cager - 1] |= RMUNG;
  551.     rrand[rindex_1.cager - 1] = 147;
  552.     jigsup_(148);
  553. /*                         !MUNG PLAYER. */
  554.     return;
  555.  
  556. /* CEV15--    END GAME HERALD. */
  557.  
  558. L15000:
  559.     findex_1.endgmf = TRUE_;
  560. /*                         !WE'RE IN ENDGAME. */
  561.     rspeak_(119);
  562. /*                         !INFORM OF ENDGAME. */
  563.     return;
  564. /* CEVAPP, PAGE 7 */
  565.  
  566. /* CEV16--    FOREST MURMURS */
  567.  
  568. L16000:
  569.     cevent_1.cflag[cindex_1.cevfor - 1] = play_1.here == rindex_1.mtree || 
  570.         play_1.here >= rindex_1.fore1 && play_1.here < rindex_1.clear;
  571.     if (cevent_1.cflag[cindex_1.cevfor - 1] && prob_(10, 10)) {
  572.     rspeak_(635);
  573.     }
  574.     return;
  575.  
  576. /* CEV17--    SCOL ALARM */
  577.  
  578. L17000:
  579.     if (play_1.here == rindex_1.bktwi) {
  580.     cevent_1.cflag[cindex_1.cevzgi - 1] = TRUE_;
  581.     }
  582. /*                         !IF IN TWI, GNOME. */
  583.     if (play_1.here == rindex_1.bkvau) {
  584.     jigsup_(636);
  585.     }
  586. /*                         !IF IN VAU, DEAD. */
  587.     return;
  588.  
  589. /* CEV18--    ENTER GNOME OF ZURICH */
  590.  
  591. L18000:
  592.     cevent_1.cflag[cindex_1.cevzgo - 1] = TRUE_;
  593. /*                         !EXITS, TOO. */
  594.     newsta_(oindex_1.zgnom, 0, rindex_1.bktwi, 0, 0);
  595. /*                         !PLACE IN TWI. */
  596.     if (play_1.here == rindex_1.bktwi) {
  597.     rspeak_(637);
  598.     }
  599. /*                         !ANNOUNCE. */
  600.     return;
  601.  
  602. /* CEV19--    EXIT GNOME */
  603.  
  604. L19000:
  605.     newsta_(oindex_1.zgnom, 0, 0, 0, 0);
  606. /*                         !VANISH. */
  607.     if (play_1.here == rindex_1.bktwi) {
  608.     rspeak_(638);
  609.     }
  610. /*                         !ANNOUNCE. */
  611.     return;
  612. /* CEVAPP, PAGE 8 */
  613.  
  614. /* CEV20--    START OF ENDGAME */
  615.  
  616. L20000:
  617.     if (findex_1.spellf) {
  618.     goto L20200;
  619.     }
  620. /*                         !SPELL HIS WAY IN? */
  621.     if (play_1.here != rindex_1.crypt) {
  622.     return;
  623.     }
  624. /*                         !NO, STILL IN TOMB? */
  625.     if (! lit_(play_1.here)) {
  626.     goto L20100;
  627.     }
  628. /*                         !LIGHTS OFF? */
  629.     cevent_1.ctick[cindex_1.cevste - 1] = 3;
  630. /*                         !RESCHEDULE. */
  631.     return;
  632.  
  633. L20100:
  634.     rspeak_(727);
  635. /*                         !ANNOUNCE. */
  636. L20200:
  637.     i__1 = objcts_1.olnt;
  638.     for (i = 1; i <= i__1; ++i) {
  639. /*                         !STRIP HIM OF OBJS. */
  640.     newsta_(i, 0, objcts_1.oroom[i - 1], objcts_1.ocan[i - 1], 
  641.         0);
  642. /* L20300: */
  643.     }
  644.     newsta_(oindex_1.lamp, 0, 0, 0, aindex_1.player);
  645. /*                         !GIVE HIM LAMP. */
  646.     newsta_(oindex_1.sword, 0, 0, 0, aindex_1.player);
  647. /*                         !GIVE HIM SWORD. */
  648.  
  649.     objcts_1.oflag1[oindex_1.lamp - 1] = (objcts_1.oflag1[oindex_1.lamp - 1] |
  650.          LITEBT) & ~ ONBT;
  651.     objcts_1.oflag2[oindex_1.lamp - 1] |= TCHBT;
  652.     cevent_1.cflag[cindex_1.cevlnt - 1] = FALSE_;
  653. /*                         !LAMP IS GOOD AS NEW. */
  654.     cevent_1.ctick[cindex_1.cevlnt - 1] = 350;
  655.     findex_1.orlamp = 0;
  656.     objcts_1.oflag2[oindex_1.sword - 1] |= TCHBT;
  657.     hack_1.swdact = TRUE_;
  658.     hack_1.swdsta = 0;
  659.  
  660.     hack_1.thfact = FALSE_;
  661. /*                         !THIEF GONE. */
  662.     findex_1.endgmf = TRUE_;
  663. /*                         !ENDGAME RUNNING. */
  664.     cevent_1.cflag[cindex_1.cevmat - 1] = FALSE_;
  665. /*                         !MATCHES GONE, */
  666.     cevent_1.cflag[cindex_1.cevcnd - 1] = FALSE_;
  667. /*                         !CANDLES GONE. */
  668.  
  669.     scrupd_(rooms_1.rval[rindex_1.crypt - 1]);
  670. /*                         !SCORE CRYPT, */
  671.     rooms_1.rval[rindex_1.crypt - 1] = 0;
  672. /*                         !BUT ONLY ONCE. */
  673.     f = moveto_(rindex_1.tstrs, play_1.winner);
  674. /*                         !TO TOP OF STAIRS, */
  675.     f = rmdesc_(3);
  676. /*                         !AND DESCRIBE. */
  677.     return;
  678. /*                         !BAM */
  679. /*                         ! */
  680.  
  681. /* CEV21--    MIRROR CLOSES. */
  682.  
  683. L21000:
  684.     findex_1.mrpshf = FALSE_;
  685. /*                         !BUTTON IS OUT. */
  686.     findex_1.mropnf = FALSE_;
  687. /*                         !MIRROR IS CLOSED. */
  688.     if (play_1.here == rindex_1.mrant) {
  689.     rspeak_(728);
  690.     }
  691. /*                         !DESCRIBE BUTTON. */
  692.     if (play_1.here == rindex_1.inmir || mrhere_(play_1.here) == 1) {
  693.     rspeak_(729);
  694.     }
  695.     return;
  696. /* CEVAPP, PAGE 9 */
  697.  
  698. /* CEV22--    DOOR CLOSES. */
  699.  
  700. L22000:
  701.     if (findex_1.wdopnf) {
  702.     rspeak_(730);
  703.     }
  704. /*                         !DESCRIBE. */
  705.     findex_1.wdopnf = FALSE_;
  706. /*                         !CLOSED. */
  707.     return;
  708.  
  709. /* CEV23--    INQUISITOR'S QUESTION */
  710.  
  711. L23000:
  712.     if (advs_1.aroom[aindex_1.player - 1] != rindex_1.fdoor) {
  713.     return;
  714.     }
  715. /*                         !IF PLAYER LEFT, DIE. */
  716.     rspeak_(769);
  717.     i__1 = findex_1.quesno + 770;
  718.     rspeak_(i__1);
  719.     cevent_1.ctick[cindex_1.cevinq - 1] = 2;
  720.     return;
  721.  
  722. /* CEV24--    MASTER FOLLOWS */
  723.  
  724. L24000:
  725.     if (advs_1.aroom[aindex_1.amastr - 1] == play_1.here) {
  726.     return;
  727.     }
  728. /*                         !NO MOVEMENT, DONE. */
  729.     if (play_1.here != rindex_1.cell && play_1.here != rindex_1.pcell) {
  730.     goto L24100;
  731.     }
  732.     if (findex_1.follwf) {
  733.     rspeak_(811);
  734.     }
  735. /*                         !WONT GO TO CELLS. */
  736.     findex_1.follwf = FALSE_;
  737.     return;
  738.  
  739. L24100:
  740.     findex_1.follwf = TRUE_;
  741. /*                         !FOLLOWING. */
  742.     i = 812;
  743. /*                         !ASSUME CATCHES UP. */
  744.     i__1 = xsrch_1.xmax;
  745.     i__2 = xsrch_1.xmin;
  746.     for (j = xsrch_1.xmin; i__2 < 0 ? j >= i__1 : j <= i__1; j += i__2) {
  747.     if (findxt_(j, advs_1.aroom[aindex_1.amastr - 1]) && curxt_1.xroom1 
  748.         == play_1.here) {
  749.         i = 813;
  750.     }
  751. /* L24200: */
  752.     }
  753.     rspeak_(i);
  754.     newsta_(oindex_1.master, 0, play_1.here, 0, 0);
  755. /*                         !MOVE MASTER OBJECT. */
  756.     advs_1.aroom[aindex_1.amastr - 1] = play_1.here;
  757. /*                         !MOVE MASTER PLAYER. */
  758.     return;
  759.  
  760. } /* cevapp_ */
  761.  
  762. /* LITINT-    LIGHT INTERRUPT PROCESSOR */
  763.  
  764. /* DECLARATIONS */
  765.  
  766. static void litint_(obj, ctr, cev, ticks, tickln)
  767. integer obj;
  768. integer *ctr;
  769. integer cev;
  770. const integer *ticks;
  771. integer tickln;
  772. {
  773.     /* Parameter adjustments */
  774.     --ticks;
  775.  
  776.     /* Function Body */
  777.     ++(*ctr);
  778. /*                         !ADVANCE STATE CNTR. */
  779.     cevent_1.ctick[cev - 1] = ticks[*ctr];
  780. /*                         !RESET INTERRUPT. */
  781.     if (cevent_1.ctick[cev - 1] != 0) {
  782.     goto L100;
  783.     }
  784. /*                         !EXPIRED? */
  785.     objcts_1.oflag1[obj - 1] &= ~ (LITEBT + FLAMBT + 
  786.         ONBT);
  787.     if (objcts_1.oroom[obj - 1] == play_1.here || objcts_1.oadv[obj - 1] == 
  788.         play_1.winner) {
  789.     rspsub_(293, objcts_1.odesc2[obj - 1]);
  790.     }
  791.     return;
  792.  
  793. L100:
  794.     if (objcts_1.oroom[obj - 1] == play_1.here || objcts_1.oadv[obj - 1] == 
  795.         play_1.winner) {
  796.     rspeak_(ticks[*ctr + tickln / 2]);
  797.     }
  798.     return;
  799.  
  800. } /* litint_ */
  801.